The present invention relates to techniques for generating modulation codes and, more particularly, to techniques for permuting MTR (maximum transition run) codes with ECC (error correction code) without the use of a second MTR code.
A disk drive can write data bits onto a data storage disk such as a magnetic hard disk. The disk drive can also read data bits that have been stored on a data disk. Certain data patterns are difficult to write onto a disk and often cause errors when the data patterns are read back. Long sequences of consecutive zeros or consecutive ones (e.g., 40 consecutive zeros) are examples of data patterns that are prone to errors. A long sequence of alternating polarity bits (010101010 . . . ) is another example of an error prone data pattern.
It is desirable to eliminate error prone patterns in user input data. Eliminating error prone patterns ensures reliable operation of the detector and timing loops in a disk drive system. One way to eliminate error prone data patterns is to substitute these data patterns with data patterns that are less likely to cause errors. The substitute symbols can be stored in memory in lookup tables. Lookup tables, however, are undesirable for performing substitutions of data patterns with a large number of bits, because they require a large amount of memory.
Many disk drives have a modulation encoder that uses modulation codes to eliminate error prone data patterns. Modulation encoders impose global and/or interleaved constraints on data to eliminate certain data patterns. A global constraint prohibits data patterns with more than a certain number of consecutive zeros or ones. An interleaved constraint prohibits data patterns with more than a certain number of alternating zeros or ones.
Modulation codes, also known as constrained codes, have been widely used in magnetic and optical data storage to eliminate sequences that are undesired for the processes of recording and reproducing digital data. Various classes of modulation codes are used in practice. For example, peak detection systems employing run length-limited RLL(d,k) constrained codes, such as rate-½ RLL(2,7) and rate-⅔ RLL(1,7) codes, have been predominant in digital magnetic storage at low normalized linear densities.
At moderate normalized linear densities, the introduction of partial-response maximum-likelihood (PRML) detection channels into data storage required a different type of constrained codes. This class of codes, which are known as PRML(G,I) codes, facilitates timing recovery and gain control, and limits the path memory length of the sequence detector, and therefore the decoding delay, without significantly degrading detector performance. PRML(G,I) codes are used in conjunction with 1/(1+D2) precoders and noise-predictive maximum likelihood (NPML) channels, which generalize the PRML concept.
More recently, maximum transition run (MTR) codes, in particular MTR(j,k) and MTR(j,k,t) codes, have been introduced to provide coding gain for noise-predictive maximum likelihood channels. MTR codes, which are used in conjunction with 1/(1+D) precoders, improve detector performance by eliminating or reducing the occurrence of dominant error events at the output of the sequence detector at the expense of increasing the baud rate and incorporating the j-constraint into the detector. Likewise, time-varying maximum transition run codes (TMTR) used in practice employ the same techniques as MTR codes, with the further distinction that odd and even bits of data have different constraints by implementing a time-varying trellis.
Disk drives typically have error correction encoders. A Reed-Solomon (RS) encoder is one type of error correction encoder. An RS encoder generates error correction code (ECC) check bytes (including cyclic redundancy check (CRC) bytes, if any). The ECC and CRC check bytes are used to detect errors and to correct errors in the data bytes using well-known decoding processes. The RS encoder inserts ECC and CRC check bytes into the data stream before data is written onto a disk. After data is read from the disk, an RS decoder uses the ECC and CRC codes to detect and correct errors in the data.
Modulation encoding can be performed prior to RS encoding or after RS encoding. Performing modulation encoding after RS encoding is referred to as forward concatenation. In forward concatenation, data is initially RS encoded. Then the data is modulation encoded, and the modulation encoded data is written onto a disk. Data is subsequently read from the disk and demodulated. RS decoding is performed after the data is demodulated. No error correction is performed on the data between modulation encoding and demodulation. The demodulation process in forward concatenation tends to propagate errors. Efficient MTR codes intrinsically have poor error propagation due to code constructions, which prevents gains at pre-ECC to be carried over to post-ECC with the conventional forward concatenation system configuration. Permuting MTR/ECC allows the pre-ECC gains of MTR codes to be carried over after ECC since post-ECC gains are what is important to real applications.
Performing modulation encoding prior to RS encoding is referred to as reverse concatenation. FIG. 1A illustrates a typical reverse concatenation technique. Data is initially encoded by a modulation encoder 101. Modulation encoder 101 generates data 102 that is modulated according to a predetermined constraint. For example, a global constraint may be that modulated data 102 can have no more than 10 consecutive zeros (G=10). The modulated data is then encoded by an RS encoder 103 to generate RS check bytes 104 (a byte can be 8-bit, 10-bit, or others). RS check bytes 104 are unconstrained. For example, check bytes 104 may contain more than 10 consecutive zeros.
The insertion block 105 inserts the check bytes into the modulated data stream. The combined data stream 107 is then stored on disk 110. The maximum run of consecutive 0 or 1 bits allowed in a global set of data is less than or equal to G.
FIG. 1B illustrates an example of a worst case scenario for the reverse concatenation technique shown in FIG. 1A. For example, assume that the modulated data 102 has a constraint of G=10, and the RS check bytes are 10 bits long. Although only a maximum of 10 consecutive zeros are allowed in the modulated data 102, the combined data stream 107 may violate this constraint with a maximum of 20 consecutive zeros (G=20), as shown in FIG. 1B.
Reverse concatenation solves the problem of error propagation, because the RS decoder corrects any errors before the data is demodulated. However, the RS check bytes are not constrained by modulation encoding, because the check bytes are inserted into the data stream after modulation encoding. As a result, the check bytes may contain error prone sequences of bits, such as too many consecutive zeros. The insertion of unconstrained check bytes may significantly degrade the overall modulation constraint of a modulated data stream.
In alternate conventional configurations of reverse concatenation, a second MTR modulation encoder is used to ensure that the ECC check bytes also satisfy the specified constraint. FIG. 2A illustrates a conventional reverse concatenation technique with implementation of a second MTR encoder. The first MTR encoder 203 removes the strings of consecutive ones and zeros from the customer data 201 that violate a specified constraint. The precoder 205 translates the output code sequences of MTR encoder 203 into sequences of magnetic flux transitions to be written on a data track within a hard disk drive. The ECC encoder 207 produces check symbols to check that the output sequences from MTR encoder 203 are properly generated (i.e., the sequences do not contain any flipped bits, where a ‘1’ is incorrectly written as a ‘0’ or vice versa). The second MTR encoder 209 removes any consecutive run sequences that would violate the constraint if the ECC check symbols were to be simply inserted into the MTR encoded data, as shown in FIG. 1B. The second precoder 211 performs similar functions as the precoder 205, but on the MTR encoded data from the second MTR encoder 209. The ECC bits are added to the end of the MTR encoded data. The variable parity insertion module 213 adds extra parity bits to the end of the encoded data to keep track of the number of ones and zeros in the data stream, producing the recorded data 215. The retrieval of the original data (decoding) is shown in FIG. 2B, where a conventional reverse concatenation technique of decoding playback data 251 back to the original customer data 265 is illustrated. The parity and non-parity correction module 253 removes the extra parity bits that were added to the data to make correction based on a predefined set of error events. The inverse precoder 255 translates the sequences of magnetic flux transitions back to MTR encoded sequences. The MTR decoder 257 restores original consecutive run sequences that would have violated the constraint if the ECC check symbols were to be simply inserted into the MTR encoded data. The inverse precoder 261 performs similar functions as the inverse precoder 255. The ECC decoder 259 separates the ECC check bits from the MTR encoded data. The MTR decoder 263 converts sequences that were modulated from the MTR encoder 203 back to the original customer data 265. The use of a second MTR encoder in the reverse concatenation techniques, however, introduces potential sources of error propagation, code rate loss, and latency issues.